○リモートオブジェクト(分散オブジェクト)

遠隔にあるオブジェクトを参照できます
もちろん値も共有できます。
リモートオブジェクトのメソッドを呼び出した場合の処理は、サーバー側が処理します。
DCOMの後継みたいです。

■リモートオブジェクト------------------------------------------------------

□プロジェクト ClassLibrary リモートオブジェクトの作成
□ファイル名 : ClassLibrary1

VB.net==========================

Public Class Class1
    Inherits System.MarshalByRefObject

    Dim pos As Integer
    Public Function setInt(ByVal a As Integer) As Integer
        pos = a
        Return a
    End Function

    Public Function getInt() As Integer
        Return pos
    End Function

End Class

C#==========================

namespace ClassLibrary1
{
	public class Class1 : System.MarshalByRefObject
	{
		public int pos;
		public int setInt(int a)
		{
			pos=a;
			return a;
		}
		public int getInt()
		{
			return pos;
		}
	}
}


■サーバー------------------------------------------------------
コンソールアプリケーションとして作成

□System.Runtime.Remoting.dllを参照
□リモートオブジェクトとして作成した ClassLibrary1 を参照

HttpChannel : HTTP SOAP によりインターネット経由でオブジェクトにアクセスできる
TcpChannel : TCP Binary により閉じられた環境でのオーバーヘッドの低さを活かせられる

VB.net==========================

Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp

Module Module1

    Sub Main()
        Dim chan As TcpChannel = New TcpChannel(1000)
        ChannelServices.RegisterChannel(chan)

        RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("ClassLibrary1.Class1,ClassLibrary1"), "test", WellKnownObjectMode.Singleton)
        Console.WriteLine("リターンキーを押すと終了します。")
        Console.ReadLine()
        ChannelServices.UnregisterChannel(chan)
    End Sub

End Module

C#==========================

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace ConsoleApplication3
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			TcpChannel chan = new TcpChannel(1000);
			ChannelServices.RegisterChannel(chan);

			RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("ClassLibrary1.Class1,ClassLibrary1"), "test", WellKnownObjectMode.Singleton);
			Console.WriteLine("リターンキーを押すと終了します。");
			Console.ReadLine();
			ChannelServices.UnregisterChannel(chan);
		}
	}
}



■クライアント--------------------------------------------------------------

□System.Runtime.Remoting.dllを参照
□リモートオブジェクトとして作成した ClassLibrary1 を参照

VB.net==========================

        Dim remoteObj As ClassLibrary1.Class1
        remoteObj = CType(Activator.GetObject(GetType(ClassLibrary1.Class1), "tcp://localhost:1000/test"), ClassLibrary1.Class1)

        'リモートオブジェクトのメソッドの呼び出し
        remoteObj.setInt(11)
        MessageBox.Show(remoteObj.getInt().ToString())

C#==========================

        ClassLibrary1.Class1 remoteObj;
        remoteObj = (ClassLibrary1.Class1)(Activator.GetObject(typeof(ClassLibrary1.Class1), "tcp://localhost:1000/test"));

        //リモートオブジェクトのメソッドの呼び出し
        remoteObj.setInt(11);
        MessageBox.Show(remoteObj.getInt().ToString());



▲トップページ > Visual BASIC と C#